//
//  RCConversationListViewController.h
//  RongIMKit
//
//  Created by xugang on 15/1/22.
//  Copyright (c) 2015年 RongCloud. All rights reserved.
//

#ifndef __RCConversationListViewController
#define __RCConversationListViewController
#import <UIKit/UIKit.h>
#import "RCConversationModel.h"
#import "RCBaseViewController.h"
#import "RCThemeDefine.h"

@class RCConversationBaseCell;
@class RCNetworkIndicatorView;
/**
 *  RCConversationListViewController
 */
@interface RCConversationListViewController : RCBaseViewController
/**
 *  conversationListDataSource
 */
@property (nonatomic,strong) NSMutableArray *conversationListaDataSource;

/**
 *  conversationListTableView
 */
@property (nonatomic,strong) UITableView *conversationListTableView;
/**
 *  show network status view
 */
@property (nonatomic, strong) RCNetworkIndicatorView *networkIndicatorView;
/**
 *  displayConversationTypeArray
 */
@property (nonatomic ,strong) NSArray *displayConversationTypeArray;
/**
 *  collectionConversationTypeArray
 */
@property (nonatomic ,strong) NSArray *collectionConversationTypeArray;
/**
 *  init
 *
 *  @param conversationTypeArray1 会话类型，NSNumber类型。
 *  @param conversationTypeArray2 会话类型，NSNumber类型。
 *
 *  @return conversationList
 */
-(id)initWithDisplayConversationTypes:(NSArray*)conversationTypeArray1 collectionConversationType: (NSArray*)conversationTypeArray2;

/**
 *  设置需要显示的会话类型
 *
 *  @param conversationTypeArray 会话类型，NSNumber类型。
 */
-(void)setDisplayConversationTypes:(NSArray*)conversationTypeArray;
/**
 *  设置需要聚合显示的会话类型
 *
 *  @param conversationTypeArray 会话类型，NSNumber类型。
 */
-(void)setCollectionConversationType: (NSArray*)conversationTypeArray;

/**
 *  设置头像样式,请在viewDidLoad之前调用
 *
 *  @param avatarStyle avatarStyle
 */
-(void)setConversationAvatarStyle:(RCUserAvatarStyle)avatarStyle;
/**
 *  设置头像大小,请在viewDidLoad之前调用
 *
 *  @param size size
 */
-(void)setConversationPortraitSize:(CGSize)size;

/**
 *  刷新会话列表
 */
-(void)refreshConversationTableViewIfNeeded;

/**
 *  重新设置空会话列表背景图
 */
-(void)resetConversationListBackgroundViewIfNeeded;

#pragma mark override
/**
 *  表格选中事件
 *
 *  @param conversationModelType 数据模型类型
 *  @param model                 数据模型
 *  @param indexPath             索引
 */
-(void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel*)model atIndexPath:(NSIndexPath *)indexPath;

#pragma mark override
/**
 *  将要加载table数据
 *
 *  @param dataSource 数据源数组
 *
 *  @return 数据源数组，可以添加自己定义的数据源item
 */
-(NSMutableArray*)willReloadTableData:(NSMutableArray*)dataSource;

#pragma mark override
/**
 *  将要显示会话列表单元，可以有限的设置cell的属性或者修改cell,例如：setHeaderImagePortraitStyle
 *
 *  @param cell      cell
 *  @param indexPath 索引
 */
-(void)willDisplayConversationTableCell:(RCConversationBaseCell*)cell atIndexPath:(NSIndexPath *)indexPath;
#pragma mark override
/**
 *  重写方法，可以实现开发者自己添加数据model后，返回对应的显示的cell
 *
 *  @param tableView 表格
 *  @param indexPath 索引
 *
 *  @return RCConversationBaseTableCell
 */
- (RCConversationBaseCell *)rcConversationListTableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

#pragma mark override
/**
 *  重写方法，可以实现开发者自己添加数据model后，返回对应的显示的cell的高度
 *
 *  @param tableView 表格
 *  @param indexPath 索引
 *
 *  @return 高度
 */
- (CGFloat)rcConversationListTableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

#pragma mark override
/**
 *  重写方法，点击tableView删除按钮触发事件
 *
 *  @param tableView    表格
 *  @param editingStyle 编辑样式
 *  @param indexPath    索引
 */
- (void)rcConversationListTableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;


#pragma mark override
/**
 *  点击头像事件
 *
 *  @param userId 用户的ID
 */
- (void) didTapCellPortrait:(NSString*)userId;


/**
 *  收到新消息
 *
 *  @param notification notification
 */
- (void) didReceiveMessageNotification:(NSNotification*)notification;

@end
#endif